
export interface User {
  id: string
  username: string
  avatar: string
  nickname: string
  signature?: string
  region?: string
  isStarred?: boolean
}

export interface Message {
  id: string
  chatId: string
  senderId: string
  content: string
  type: 'text' | 'image' | 'voice' | 'video' | 'file'
  timestamp: number
  status: 'sending' | 'sent' | 'delivered' | 'read'
  isTyping?: boolean
}

export interface Chat {
  id: string
  type: 'private' | 'group'
  name: string
  avatar: string
  lastMessage?: Message
  unreadCount: number
  members: string[]
  isTop?: boolean
  isMute?: boolean
}

export interface Contact {
  id: string
  username: string
  nickname: string
  avatar: string
  signature?: string
  region?: string
  isStarred?: boolean
  initial?: string
}

export interface Moment {
  id: string
  userId: string
  user: User
  content: string
  images?: string[]
  timestamp: number
  likes: string[]
  comments: Comment[]
  isLiked?: boolean
}

export interface Comment {
  id: string
  userId: string
  user: User
  content: string
  timestamp: number
  replyTo?: string
}

export interface TabItem {
  id: string
  name: string
  icon: string
  activeIcon: string
  path: string
}

export interface ChatState {
  chats: Chat[]
  currentChat: Chat | null
  messages: Message[]
  isTyping: boolean
}

export interface ContactState {
  contacts: Contact[]
  starredContacts: Contact[]
  searchQuery: string
}

export interface DiscoverState {
  moments: Moment[]
  isLoading: boolean
}

export interface UserState {
  user: User | null
  isLoggedIn: boolean
}
